﻿using app.Common;
using HLVControl.Grid;
using HLVControl.Grid.Data;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.EntityClient;
using System.Data.Objects.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace eService.BLL
{
    //PRODUCT
    public class ExcuteHANGHOA
    {
        eServiceEntities dbEntities;
        IExecuteData<PRODUCT> Execute;
        public string ErrMsg { get; set; }
        public bool KQ { get; set; }

        public ExcuteHANGHOA()
        {
            dbEntities = ConnectionProvider.getDbEntities();
            Execute = new ExecuteData<PRODUCT>(dbEntities);
        }
        public List<PRODUCT> GetAll()
        {
            List<PRODUCT> list = (List<PRODUCT>)Execute.GetAll().ToList(); 
            if (list != null && list.Count > 0) KQ = true;
            return list;
        }
        public PRODUCT GetByID(int ID)
        {
            PRODUCT u = Execute.GetById(ID);
            if (u != null) KQ = true;
            return u;
        }
        public bool Add(PRODUCT NewHANGHOA)
        {
            KQ = false;
            if (NewHANGHOA != null)
            {
                KQ = Execute.Insert(NewHANGHOA);
                if (KQ)
                    ErrMsg = "Thêm mặt hàng mới thành công!";
                else
                    ErrMsg = "Không thể thêm mặt hàng mới!";
            }
            else
            {
                ErrMsg = "Vui lòng nhập thông tin đầy đủ!";
            }
            return KQ;
        }
        public bool UpDate(PRODUCT HANGHOA)
        {
            KQ = false;
            if (HANGHOA != null)
            {
                PRODUCT obj = dbEntities.PRODUCTS.Find(HANGHOA.PrID);
                if (obj != null)
                {
                    KQ = Execute.Update(HANGHOA,obj);
                    if (KQ)
                        ErrMsg = "Cập nhật mặt hàng thành công!";
                    else
                        ErrMsg = "Không thể cập nhật mặt hàng !";
                }
            }
            else
            {
                ErrMsg = "Vui lòng chọn mặt hàng !";
            }
            return KQ;
        }
        public bool Delete(PRODUCT HANGHOA)
        {
            KQ = false;
            if (HANGHOA != null)
            {
                PRODUCT obj = dbEntities.PRODUCTS.Find(HANGHOA.PrID);
                if (obj != null)
                {
                    KQ = Execute.Delete(obj);
                    if (KQ)
                        ErrMsg = "xoá mặt hàng thành công!";
                    else
                        ErrMsg = "Không thể xoá mặt hàng !";
                }
            }
            else
            {
                ErrMsg = "Vui lòng chọn mặt hàng !";
            }
            return KQ;
        }
        public PRODUCT LoadValues(int Ma,int MaNhom,int MaDonVi,int MaNCC, string Ten,int theloai,decimal GiaNhap,decimal GiaBan,decimal GiaDacBiet,decimal GiamGia,int VAT,bool SuDung, string GhiChu)
        {
            KQ = false;
            PRODUCT obj = new PRODUCT();
            if (GiamGia > GiaBan || GiamGia > GiaDacBiet)
            {
                obj = null;
                ErrMsg = "Giảm giá không thể lớn hơn giá bán và giá đặc biệt!";
            }
            else
            {
                if (Ten != "" && MaNhom > 0 && MaDonVi > 0 && MaNCC > 0 && theloai > 0)
                {
                    obj.PrID = Ma;
                    obj.PrUnitID = MaDonVi;
                    obj.GpID = MaNhom;
                    obj.GpParentID = MaNCC;
                    obj.PrName = Ten;
                    obj.TypeProID = (short)theloai;
                    obj.PrPriceBase = (double)GiaNhap;
                    obj.PrPriceRetail = (double)GiaBan;
                    obj.PrPriceTrade = (double)GiaDacBiet;
                    obj.PrDiscount = (double)GiamGia;
                    obj.GTGT = (double)VAT;
                    obj.IsUse = (bool)SuDung;
                    obj.PrNotes = GhiChu;
                    KQ = true;
                }
                else
                {
                    obj = null;
                    ErrMsg = "Vui lòng điền đầy đủ thông tin mặt hàng!";
                }
            }
            return obj;
        }

        public DataTable ToDataTable(List<PRODUCT> list)
        {
            DataTable dtData = Execute.ToDataTable<PRODUCT>(list);
            return dtData;
        }
        public bool LoadToTreeview(TreeListView treeview, List<PRODUCT> list)
        {
            KQ = false;
            ExcuteNHOMHANG exeGrp = new ExcuteNHOMHANG();
            ExcuteDONVI exeUni = new ExcuteDONVI();
            ExcuteNHACUNGCAP exeNcc = new ExcuteNHACUNGCAP();
            //DataTable dtData = Execute.ToDataTable<PRODUCT>(list);
            treeview.Rows.Clear();
            int count = 1;
            foreach (PRODUCT obj in list)
            {
                TreeListRow row = treeview.CreateRow();
                row.Cells.Add(new TreeListCell(count));
                row.Cells.Add(new TreeListCell(obj.PrID));
                row.Cells.Add(new TreeListCell(obj.PrName));

                UNITPRODUCT objDV = exeUni.GetByID((int)obj.PrUnitID);
                if (objDV != null) row.Cells.Add(new TreeListCell(objDV.UnitName));

                row.Cells.Add(new TreeListCell(obj.PrPriceBase));
                row.Cells.Add(new TreeListCell(obj.PrPriceRetail));
                row.Cells.Add(new TreeListCell(obj.PrPriceTrade));
                row.Cells.Add(new TreeListCell(obj.PrDiscount));
                row.Cells.Add(new TreeListCell(obj.GTGT));

                GROUPPRODUCT objGrp = exeGrp.GetByID((int)obj.GpID);
                if (objGrp != null) row.Cells.Add(new TreeListCell(objGrp.GpName));
                PARTNERINFO objNcc = exeNcc.GetByID((int)obj.GpParentID);
                if (objNcc != null) row.Cells.Add(new TreeListCell(objNcc.Name));
                if (obj.TypeProID == 0) row.Cells.Add(new TreeListCell("Nguyên vật liệu"));
                if (obj.TypeProID == 1) row.Cells.Add(new TreeListCell("Thành phẩm"));
                if (obj.TypeProID == 2) row.Cells.Add(new TreeListCell("Tổng hợp"));
                row.Cells.Add(new TreeListCell(obj.PrNotes));

                if ((bool)obj.IsUse) row.Cells.Add(new TreeListCell("SĐ"));
                else row.Cells.Add(new TreeListCell("--"));

                treeview.Rows.Add(row);
                count++;
                KQ = true;
            }
            treeview.Refresh();
            //KQ = Execute.FillDataToTreeView(dtData, treeview);
            if (!KQ)
                ErrMsg = "Không thể tải mặt hàng!";
            return KQ;
        }
    }
}

